home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / etc / getgrent.c < prev    next >
C/C++ Source or Header  |  1989-07-21  |  1KB  |  78 lines

  1. /*
  2.  * Warning:  this file was borrowed from 4.3 BSD and appears to be a
  3.  * derivative of AT&T code.  Do not distribute it to unlicensed
  4.  * parties.
  5.  */
  6.  
  7. #if defined(LIBC_SCCS) && !defined(lint)
  8. static char sccsid[] = "@(#)getgrent.c    5.3 (Berkeley) 11/5/87";
  9. #endif LIBC_SCCS and not lint
  10.  
  11. #include <stdio.h>
  12. #include <grp.h>
  13.  
  14. #define    MAXGRP    200
  15.  
  16. static char *GROUP = "/etc/group";
  17. static FILE *grf = NULL;
  18. static char line[BUFSIZ+1];
  19. static struct group group;
  20. static char *gr_mem[MAXGRP];
  21.  
  22. setgrent()
  23. {
  24.     if( !grf )
  25.         grf = fopen( GROUP, "r" );
  26.     else
  27.         rewind( grf );
  28. }
  29.  
  30. endgrent()
  31. {
  32.     if( grf ){
  33.         fclose( grf );
  34.         grf = NULL;
  35.     }
  36. }
  37.  
  38. static char *
  39. grskip(p,c)
  40. register char *p;
  41. register c;
  42. {
  43.     while( *p && *p != c ) ++p;
  44.     if( *p ) *p++ = 0;
  45.     return( p );
  46. }
  47.  
  48. struct group *
  49. getgrent()
  50. {
  51.     register char *p, **q;
  52.  
  53.     if( !grf && !(grf = fopen( GROUP, "r" )) )
  54.         return(NULL);
  55.     if( !(p = fgets( line, BUFSIZ, grf )) )
  56.         return(NULL);
  57.     group.gr_name = p;
  58.     group.gr_passwd = p = grskip(p,':');
  59.     group.gr_gid = atoi( p = grskip(p,':') );
  60.     group.gr_mem = gr_mem;
  61.     p = grskip(p,':');
  62.     grskip(p,'\n');
  63.     q = gr_mem;
  64.     while( *p ){
  65.         if (q < &gr_mem[MAXGRP-1])
  66.             *q++ = p;
  67.         p = grskip(p,',');
  68.     }
  69.     *q = NULL;
  70.     return( &group );
  71. }
  72.  
  73. setgrfile(file)
  74.     char *file;
  75. {
  76.     GROUP = file;
  77. }
  78.